package com.tianjipms.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tianjipms.dao.UserMapper;
import com.tianjipms.dto.UserRoleDTO;
import com.tianjipms.entity.User;
import com.tianjipms.service.UserService;
import com.tianjipms.utils.Result;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

@RestController
@RequestMapping("/api/user")
public class UserController {
    @Resource
    private UserService userService;
    //查询用户信息
    @GetMapping("/searchById")
    public Result searchById(@RequestParam(defaultValue = "1") Long userId){
        return Result.ok(userService.getOne(new QueryWrapper<User>().eq("id", userId)));
    }
    //添加用户
    @PostMapping("/add")
//    @PreAuthorize("hasAuthority('sys:user:add')")
//    public Result add(@RequestBody User user){
//        //查询用户
//        User item = userService.findUserByPhone(user.getPhone());
//        //判断对象是否为空
//        if(item != null){
//            return Result.error().message("该登录名称已被使用，请重新输入！");
//        }
//        //密码加密
//        user.setPassword(passwordEncoder.encode(user.getPassword()));
//        //调用保存用户信息的方法
//        if(userService.save(user)){
//            return Result.ok().message("用户添加成功");
//        }
//        return Result.error().message("用户添加失败");
//    }
    //更改用户信息
    @PutMapping("/update")
//    @PreAuthorize("hasAuthority('sys:user:edit')")
    public Result update(@RequestBody User user) {
        //查询用户
        User item = userService.findUserByPhone(user.getPhone());
        //判断对象是否为空,且查询到的用户ID不等于当前编辑的用户ID，表示该名称被占用
        if (item != null && item.getId() != user.getId()) {
            return Result.error().message("登录名称已被占用！");
        }
        //调用修改用户信息的方法
        if(userService.updateById(user)){
            return Result.ok().message("用户修改成功");
        }
        return Result.error().message("用户修改失败");
    }
    //删除用户
    @DeleteMapping("/delete/{id}")
//    @PreAuthorize("hasAuthority('sys:user:delete')")
    public Result delete(@PathVariable Long id) {
        //调用删除用户信息的方法
        if(userService.removeById(id)){
            return Result.ok().message("用户删除成功");
        }
        return Result.error().message("用户删除失败");
    }

    //分页查询所有用户
    @GetMapping("/listAll")
    public Result listAll(@RequestParam(defaultValue = "1") Long pageNum,
                          @RequestParam(defaultValue = "5") Long pageSize){
        IPage<User> page = new Page<>(pageNum, pageSize);
        userService.page(page);
        return Result.ok(page);
    }

    //按角色分页查询用户
    @GetMapping("/listAllByRoleId")
    public Result listAllByRole(@RequestParam Long roleId,
                                @RequestParam(defaultValue = "1") Long pageNum,
                                @RequestParam(defaultValue = "5") Long pageSize){
        IPage<User> page = new Page<>(pageNum, pageSize);
        userService.findUserByRoleIdPage(page, roleId);
        return Result.ok(page);
    }

    /**
     * 分配角色
     * @param userRoleDTO
     * @return
     */
    @PostMapping("/saveUserRole")
//    @PreAuthorize("hasAuthority('sys:user:assign')")
    public Result saveUserRole(@RequestBody UserRoleDTO userRoleDTO){
        if (userService.saveUserRole(userRoleDTO.getUserId(),
                userRoleDTO.getRoleIds())) {
            return Result.ok().message("角色分配成功");
        }
        return Result.error().message("角色分配失败");
    }

}
